<?php
class Whois {

	var $count = 0;
	var $domain = "";
	function SetDomain($udomain) {
		$this->domain = $udomain;
	}

	function GetWhois() {
		$this->count++;
		$wh = "";
		$w_server = $this->GetServer();
		if ($w_server == "")
			return "";
		$fp = fsockopen($w_server, 43, $errno, $errstr, 30);
		if (!$fp) {
			echo $errstr;
			return "";
		}
		$out = $this->domain . "\r\n";
		$out .= "Connection: Close\r\n\r\n";
		fputs($fp, $out);
		while (!feof($fp)) {
			$wh .= nl2br(fgets($fp, 255));
		}
		fclose($fp);
		if (trim($wh) == "") {
			if ($this->count < 2) {
				$wh = $this->GetWhois();
			}
		}
		return $wh;
	}

	private $arr_whois_servers = array (
		'com' => 'whois.internic.net',
		'net' => 'whois.internic.net',
		'org' => 'whois.pir.org',
		'asia' => 'whois.crsnic.net',
		'ac' => 'whois.nic.uk',
		'ad' => 'whois.nic.ad',
		'ae' => 'whois.uaenic.ae',
		'ag' => 'whois.nic.ag',
		'ai' => 'whois.offshore.com.ai',
		'al' => 'whois.inima.al',
		'an' => 'whois.una.net',
		'ao' => 'whois.fccn.pt',
		'aq' => 'whois.nsrc.org',
		'ar' => 'whois.nic.ar',
		'as' => 'whois.nic.as',
		'am' => 'whois.amnic.net',
		'au' => 'whois.amnic.net',
		'at' => 'whois.amnic.net',
		'az' => 'whois.domain.az',
		'ba' => 'whois.utic.net.ba',
		'bb' => 'whois.domains.org.bb',
		'be' => 'whois.dns.be',
		'bf' => 'whois.onatel.bf',
		'bg' => 'whois.digsys.bg',
		'bh' => 'whois.batelco.com.bh',
		'bi' => 'whois.nic.bi',
		'biz' => 'whois.nic.biz',
		'bm' => 'whois.bermudanic.bm',
		'bn' => 'whois.brunet.bn',
		'bo' => 'whois.digsys.bo',
		'by' => 'whois.unibel.by',
		'bz' => 'whois.belizenic.bz',
		'br' => 'whois.registro.fapesp.br',
		'bt' => 'whois.nic.bt',
		'bv' => 'whois.norid.no',
		'ca' => 'whois.cira.ca',
		'cc' => 'whois.nic.cc',
		'cd' => 'whois.nic.cd',
		'cf' => 'whois.socatel.intnet.cf',
		'cg' => 'whois.nic.cg',
		'ch' => 'whois.nic.ch',
		'ci' => 'whois.aipdi.ci',
		'ck' => 'whois.oyster.net.ck',
		'cl' => 'whois.nic.cl',
		'cm' => 'whois.info.intelcam.cm',
		'cn' => 'whois.cnnic.net.cn',
		'co' => 'whois.nic.uniandes.edu.co',
		'coop' => 'whois.nic.coop',
		'cu' => 'whois.nic.cu',
		'cx' => 'whois.nic.cx',
		'cy' => 'whois.nic.cy',
		'cz' => 'whois.nic.cz',
		'de' => 'whois.denic.de',
		'dk' => 'whois.dk-hostmaster.dk',
		'dj' => 'whois.intnet.dj',
		'do' => 'whois.nic.do',
		'dz' => 'whois.nic.dz',
		'ec' => 'whois.nic.ec',
		'edu' => 'whois.educause.net',
		'ee' => 'whois.eenet.ee',
		'eg' => 'whois.frcu.eun.eg',
		'es' => 'whois.nic.es',
		'et' => 'whois.telecom.net.et',
		'fi' => 'whois.ripe.net',
		'fj' => 'whois.usp.ac.fj',
		'fk' => 'whois.fidc.org.fk',
		'fm' => 'whois.dot.fm',
		'fo' => 'whois.nic.fo',
		'fr' => 'whois.nic.fr',
		'gb' => 'whois.nic.uk',
		'ge' => 'whois.nic.net.ge',
		'gf' => 'whois.nplus.gf',
		'gg' => 'whois.nic.gg',
		'gh' => 'whois.ghana.com',
		'gi' => 'whois.gibnet.gi',
		'gl' => 'whois.nic.gl',
		'gm' => 'whois.nic.gm',
		'gn' => 'whois.psg.com',
		'gov' => 'whois.nic.gov',
		'gp' => 'whois.nic.gp',
		'gq' => 'whois.getesa.gq',
		'gr' => 'whois.hostmaster.gr',
		'gs' => 'whois.adamsnames.tc',
		'gt' => 'whois.uvg.edu.gt',
		'gu' => 'whois.gadao.gov.gu',
		'hk' => 'whois.hkdnr.net.hk',
		'hm' => 'whois.registry.hm',
		'hn' => 'whois.nic.hn',
		'hr' => 'whois.carnet.hr',
		'hu' => 'whois.nic.hu',
		'id' => 'whois.idnet.net.id',
		'ie' => 'whois.domainregistry.ie',
		'il' => 'whois.isoc.org.il',
		'im' => 'whois.nic.im',
		'in' => 'whois.domain.ncst.ernet.in',
		'info' => 'whois.afilias.com',
		'int' => 'whois.iana.org',
		'io' => 'whois.nic.io',
		'ir' => 'whois.nic.ir',
		'is' => 'whois.isnic.is',
		'it' => 'whois.nic.it',
		'je' => 'whois.isles.net',
		'jo' => 'whois.nic.net.jo',
		'jp' => 'whois.nic.ad.jp',
		'ke' => 'whois.nbnet.co.ke',
		'kg' => 'whois.domain.kg',
		'kh' => 'whois.mptc.gov.kh',
		'kn' => 'whois.clu.edu',
		'kr' => 'whois.nic.or.kr',
		'kw' => 'whois.domainname.net.kw',
		'kz' => 'whois.domain.kz',
		'lb' => 'whois.aub.edu.lb',
		'lc' => 'whois.isisworld.lc',
		'li' => 'whois.nic.li',
		'lk' => 'whois.nic.lk',
		'lr' => 'whois.psg.com',
		'ls' => 'whois.co.ls',
		'lt' => 'whois.domreg.lt',
		'lu' => 'whois.dns.lu',
		'lv' => 'whois.nic.lv',
		'ly' => 'whois.nic.ly',
		'ma' => 'whois.iam.ma',
		'mc' => 'whois.nic.mc',
		'md' => 'whois.ripe.net',
		'mil' => 'whois.nic.mil',
		'mg' => 'whois.orstom.mg',
		'mh' => 'whois.nic.net.mh',
		'mk' => 'whois.mpt.com.mk',
		'mm' => 'whois.nic.mm',
		'mn' => 'whois.nic.mn',
		'mo' => 'whois.umac.mo',
		'mp' => 'whois.marketplace.mp',
		'mq' => 'whois.nic.mq',
		'mr' => 'whois.univ-mkc.mr',
		'ms' => 'whois.adamsnames.tc',
		'mt' => 'whois.um.edu.mt',
		'mu' => 'whois.posix.co.za',
		'mw' => 'whois.tarsus.net',
		'mx' => 'whois.nic.mx',
		'my' => 'whois.mynic.net.my',
		'mz' => 'whois.nambu.uem.mz',
		'na' => 'na-nic.com.na',
		'name' => 'whois.nic.name',
		'nc' => 'whois.norstom.nc',
		'nf' => 'whois.names.nf',
		'ni' => 'whois.nic.ni',
		'nl' => 'whois.domain-registry.nl',
		'no' => 'whois.norid.no',
		'np' => 'whois.mos.com.np',
		'nu' => 'whois.nic.nu',
		'nz' => 'whois.domainz.net.nz',
		'om' => 'whois.gto.net.om',
		'pa' => 'whois.nic.pa',
		'pe' => 'whois.ekeko.rcp.net.pe',
		'ph' => 'whois.domreg.org.ph',
		'pg' => 'whois.unitech.ac.pg',
		'pk' => 'whois.pknic.net.pk',
		'pl' => 'whois.nask.pl',
		'pm' => 'whois.nic.pm',
		'pn' => 'whois.nic.pn',
		'pr' => 'whois.uprr.pr',
		'ps' => 'whois.nic.ps',
		'pt' => 'whois.fccn.pt',
		'py' => 'whois.nic.py',
		'qa' => 'whois.qatar.net.qa',
		're' => 'whois.nic.fr',
		'ro' => 'whois.rnc.ro',
		'ru' => 'whois.ripn.net',
		'rw' => 'whois.nic.rw',
		'sa' => 'whois.saudinic.net.sa',
		'sb' => 'whois.sbnic.net.sb',
		'sd' => 'whois.sudatel.sd',
		'se' => 'whois.nic-se.se',
		'sg' => 'whois.nic.net.sg',
		'sh' => 'whois.nic.sh',
		'si' => 'whois.arnes.si',
		'sj' => 'whois.norid.no',
		'sk' => 'whois.sk-nic.sk',
		'sm' => 'whois.intelcom.sm',
		'sn' => 'whois.nic.sn',
		'so' => 'whois.nic.so',
		'st' => 'whois.st-registry.tecnisys.net',
		'su' => 'whois.ripn.net',
		'sv' => 'whois.svnet.org.sv',
		'sz' => 'whois.iafrica.sz',
		'tc' => 'whois.adamsnames.tc',
		'td' => 'whois.tit.td',
		'tf' => 'whois.adamsnames.tc',
		'tg' => 'whois.nic.tg',
		'th' => 'whois.thnic.net',
		'tj' => 'whois.nic.tj',
		'tm' => 'whois.nic.tm',
		'tn' => 'whois.ati.tn',
		'to' => 'whois.tonic.to',
		'tp' => 'whois.nic.tp',
		'tr' => 'whois.metu.edu.tr',
		'tt' => 'whois.nic.tt',
		'tw' => 'whois.twnic.net',
		'tz' => 'whois.psg.com',
		'tv' => 'whois.networksolutions.com',
		'ua' => 'nic.net.ua',
		'ug' => 'whois.nic.ug',
		'uk' => 'whois.nic.uk',
		'uk' => 'whois.ripe.net',
		'um' => 'whois.isi.edu',
		'us' => 'whois.nic.us',
		'uy' => 'whois.rau.edu.uy',
		'uz' => 'whois.freenet.uz',
		've' => 'whois.nic.ve',
		'wf' => 'whois.nic.fr',
		'vg' => 'whois.adamsnames.tc',
		'vi' => 'whois.nic.vi',
		'vn' => 'whois.batin.com.vn',
		'vu' => 'whois.vunic.vu',
		'ws' => 'samoanic.ws',
		'yt' => 'whois.nic.fr',
		'yu' => 'whois.nic.yu',
		'za' => 'whois.co.za',
		'zm' => 'whois.zamnet.zm',

	);

	function GetServer() {
		$udomain = strtolower(substr(strrchr($this->domain, '.'), 1));
		return array_key_exists($udomain, $this->arr_whois_servers) ? $this->arr_whois_servers[$udomain] : '';
	}

	function index() {
		$sd = new Whois();
		$sd->SetDomain("internic.net");//3158.cn

		//查询域名是否被注册，等价于 $sd->PrintSta();
		//$rs = $sd->GetInfo();
		//echo $rs;
		//获得域名的详细whois信息
		$data = $sd->GetWhois();
		echo iconv("UTF-8", "UTF-8", $data);
	}

}
$n = new Whois();
//$n->index();
?>